package com.mozilla.grouperfish.base.json;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Map;
import org.json.simple.JSONValue;
import com.mozilla.grouperfish.base.StreamTool;
/**
* Takes String keys and JSON values and streams them out as one JSON map,
* without composing everything in memory.
*/
public class MapStreamer {
private final Map<String, String> map;
public MapStreamer(final Map<String, String> map) {
this.map = map;
}
public void write(OutputStream out) throws IOException {
final Writer writer = new BufferedWriter(new OutputStreamWriter(out, StreamTool.UTF8));
boolean first = true;
writer.write('{');
for (final Map.Entry<String, String> items : map.entrySet()) {
if (first) {
first = false;
}
else {
writer.append(',');
writer.append('\n');
}
writer
.append('"')
.append(JSONValue.escape(items.getKey()))
.append('"')
.append(':')
.append(' ')
.write(items.getValue());
}
writer.write('}');
writer.flush();
}
}